﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Controleur
{
    /**
    * @author PAN
    * @date Juin 2010
    * @brief La classe ModeDeplacement dérive de ModeSelection et correspond au mode Déplcement de la sélection
    */
    class ModeDeplacement : ModeSelection
    {


        /***********************/
        /**** Constructeurs ****/
        /***********************/

        /** 
         * ModeDeplacement(System.Drawing.Color _couleur, int _epaisseur)
         * 
         * @brief Constructeur
         * @param System.Drawing.Color _couleur : la couleur des traits par défaut
         * @param int _epaisseur : l'épaisseur des traits par défaut
         * @return void
         */
        public  ModeDeplacement(System.Drawing.Color _couleur, int _epaisseur):base(_couleur,_epaisseur)
        {
          
        }

        /** 
         * ModeDeplacement()
         * 
         * @brief Constructeur par défaut
         * @return void
         */
        public ModeDeplacement()
            : base()
        {
           
        }



        /***************************************/
        /** Actions spécifiques à chaque mode **/
        /***************************************/


        /**
         * ActionZoneDessin(Microsoft.Ink.Stroke _stroke)
         * 
         * @brief écriture sur la zone de dessin
         * @param Stroke _stroke : objet contenant de nombreuses informations (analogue à ensemble de points)
         * @return void
        */
        public override void ActionZoneDessin(Microsoft.Ink.Stroke _stroke) 
        { 
            //recuperation de l'offset
           
            //Console.WriteLine("mode deplacement : nombre d'objets selectionnés {0}", objets_selectionnes.Count);
            if (objets_selectionnes != null)
            {
                Array points = _stroke.GetPoints();
                System.Drawing.Point p1 = (System.Drawing.Point)points.GetValue(0);
                System.Drawing.Point p2 = (System.Drawing.Point)points.GetValue(points.Length - 1);

                float x = p2.X - p1.X;
                float y = p2.Y - p1.Y;

                objets_selectionnes.Move(x, y);
            }

        }



        /**
         * ActionBouton()
         * 
         * @brief clic sur le bouton sur le côté du stylet
         * @return void
        */
        public override void ActionBouton()
        {
            controleur.changerMode(new ModeCrayon(couleur,epaisseur));
        }



        /**
        * ActionEffacer(Microsoft.Ink.Strokes _strokes)
        * 
        * @brief tracer un trait sur la zone de dessin avec la "gomme"
        * @param Strokes _strokes : objet contenant de nombreuses informations (analogue à ensemble de stroke)
        * @return void
        */
        public override void ActionEffacer(Microsoft.Ink.Strokes _strokes) { }

        /**
        * ActionDoubleClic(Microsoft.Ink.Strokes _strokes)
        * 
        * @brief Action de double clic
        * @param Strokes _strokes : objet contenant de nombreuses informations (analogue à ensemble de stroke)
        * @return void
        */
        public override void ActionDoubleClic(Microsoft.Ink.Strokes _strokes) { }
    }
}
